package persistence;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.*;
public class PersistenciaPrecioHabitacion {
	
	private static PersistenciaPrecioHabitacion instancia;
	
	public static PersistenciaPrecioHabitacion getInstancia()
	{
		if (instancia== null)
			instancia =new PersistenciaPrecioHabitacion();
		return instancia;
	}
		
	public void eliminarPrecioHabitacion(PrecioHabitacion ph, int id_tempo){
		Connection con = PoolConexiones.getPoolConexiones().getConnection();				
		try
		{
			String senten = "DELETE FROM PrecioHabitacion "
					+ "WHERE id_tempo = ? ";					
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);			
			ps.setInt(1,id_tempo);
			ps.executeUpdate();
			con.commit();
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al eliminar PrecioHabitacion: " + e.getMessage());
				e.printStackTrace();
				try{
					if(con!=null)
			            con.rollback();
				}catch( SQLException e2){
					e2.printStackTrace();
				}
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	}

	public PrecioHabitacion insertPrecioHabitacion(PrecioHabitacion ph, int id_tempo) //
	{
		int newId=0;
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		String senten = null;
		try
		{					
			senten = "INSERT INTO PrecioHabitacion (id_hab, precio, comision, impuesto, base, id_tempo) "
					+ "VALUES (?,?,?,?,?,?)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten, Statement.RETURN_GENERATED_KEYS);
			ps.setInt(1, ph.getHabitacion().getId());
			ps.setFloat(2, ph.getPrecio());
			ps.setFloat(3, ph.getComision());
			ps.setFloat(4, ph.getImpuestos());
			ps.setFloat(5, ph.getBase());
			ps.setFloat(6, id_tempo);
			ps.execute();
			ResultSet  generatedKeys = ps.getGeneratedKeys();
			if(generatedKeys.next())
			{	
				newId = generatedKeys.getInt(1);
			}
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			ph.setId(newId);
			return ph;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al Insertar PrecioHabitacion: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
		return ph;
	}
	
	public PrecioHabitacion getPrecioHabitacion (Integer id)
	{
		PrecioHabitacion ph = null; 
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		
		try
		{
			String senten = "SELECT id, id_hab, precio, comision, impuesto, base "
					+ "FROM PrecioHabitacion "
					+ "WHERE id = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,id);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{						
				ph = new PrecioHabitacion(
						result.getInt("id")
						, PersistenciaHabitacion.getInstancia().getHabitacion(result.getInt("id_hab"))
						, result.getFloat("precio")
						, result.getFloat("comision")
						, result.getFloat("impuesto")
						, result.getFloat("base")
						);								
			}
			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return ph;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar PrecioHabitacion: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return ph;
	}
	
	public ArrayList<PrecioHabitacion> getPreciosHabitaciones(int id_temporada)
	{
		ArrayList<PrecioHabitacion> precios = new ArrayList<PrecioHabitacion>();
		PrecioHabitacion ph = null; 
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		
		try
		{
			String senten = "SELECT id, id_hab, precio, comision, impuesto, base "
					+ "FROM PrecioHabitacion "
					+ "WHERE id_tempo = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, id_temporada);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{						
				ph = new PrecioHabitacion(
						result.getInt("id")
						, PersistenciaHabitacion.getInstancia().getHabitacion(result.getInt("id_hab"))
						, result.getFloat("precio")
						, result.getFloat("comision")
						, result.getFloat("impuesto")
						, result.getFloat("base")
						);
				precios.add(ph);
			}
			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return precios;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar Precios Habitaciones: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return precios;
	}
}
